/**
  ******************************************************************************
  * @file    sym32l010_hal_lvd.c
  * @author  AE Team
  * @version 1.0.3
  * @date    2024-05-28
  * @brief   LVD HAL module driver.
  *
  ******************************************************************************
  * @attention
  *
  * <h2><center>&copy; Copyright (c) 2024 SIYIMicro.
  * All rights reserved.</center></h2>
  *
  *
  ******************************************************************************
  */


/******************************************************************************/
/* Include files                                                              */
/******************************************************************************/
#include "sym32l010_hal_lvd.h"


/*******************************************************************************
  * @brief  LVD 初始化
  * @param  InitStruct 初始化结构体
  * @retval None
  */
void HAL_LVD_Init(LVD_InitTypeDef *InitStruct)
{
    // 关闭数字滤波时请保持FLTCLK为1
    uint32_t FltClk = (InitStruct->FilterTime == LVD_FILTERTIME_NONE) ? LVD_FILTERCLK_SYSCLK : InitStruct->FilterClk;

    SYM_LVD->CR0 = (uint32_t)InitStruct->Channel   | (uint32_t)InitStruct->Threshold |
                   (uint32_t)InitStruct->Action    | FltClk;
    SYM_LVD->CR1 = (uint32_t)InitStruct->Trigger   | (uint32_t)InitStruct->FilterTime;
}


/*******************************************************************************
  * @brief  LVD 反初始化
  * @param  None
  * @retval None
  */
void HAL_LVD_DeInit(void)
{
    SYM_LVD->CR0 = 0x00;
    SYM_LVD->CR1 = 0x00;
}


/*******************************************************************************
  * @brief  使能 LVD
  * @param  None
  * @retval None
  */
void HAL_LVD_Enable(void)
{
    REGBITS_SET(SYM_LVD->CR0, LVD_CR0_EN_Msk);
}


/*******************************************************************************
  * @brief  禁止 LVD
  * @param  None
  * @retval None
  */
void HAL_LVD_Disable(void)
{
    REGBITS_CLR(SYM_LVD->CR0, LVD_CR0_EN_Msk);
}


/*******************************************************************************
  * @brief  使能 LVD 中断
  * @param  None
  * @retval None
  */
void HAL_LVD_Enable_IT(void)
{
    REGBITS_SET(SYM_LVD->CR1, LVD_CR1_IE_Msk);
}


/*******************************************************************************
  * @brief  禁止 LVD 中断
  * @param  None
  * @retval None
  */
void HAL_LVD_Disable_IT(void)
{
    REGBITS_CLR(SYM_LVD->CR1, LVD_CR1_IE_Msk);
}


/*******************************************************************************
  * @brief  获取LVD输出的电平
  * @param  None
  * @retval 0   : 滤波后为低电平
  *         非0 : 滤波后为高电平
  */
uint8_t HAL_LVD_GetOutputValue(void)
{
    return (SYM_LVD->SR & LVD_SR_FLTV_Msk);
}


/************************ (C) COPYRIGHT SIYIMicro *****END OF FILE*************/
